home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / hplip / base / magic.py < prev    next >
Text File  |  2008-10-13  |  65KB  |  1,258 lines

  1. # -*- coding: utf-8 -*-
  2. #
  3. # magic.py
  4. # determines a file type by its magic number
  5. #
  6. # Copyright (c) 2000, Jason Petrone <jp_py@demonseed.net>
  7. # All Rights Reserved
  8. #
  9. # Modifications by Don Welch
  10. # (c) Copyright 2003-2008 Hewlett-Packard Development Company, L.P.
  11. #
  12. # Redistribution and use in source and binary forms, with or without modification,
  13. # are permitted provided that the following conditions are met:
  14. #
  15. #     * Redistributions of source code must retain the above copyright notice,
  16. #     this list of conditions and the following disclaimer.
  17. #     * Redistributions in binary form must reproduce the above copyright notice,
  18. #     this list of conditions and the following disclaimer in the documentation and/or
  19. #     other materials provided with the distribution.
  20. #     * Neither the name of the <ORGANIZATION> nor the names of its contributors may
  21. #     be used to endorse or promote products derived from this software without
  22. #     specific prior written permission.
  23. #
  24. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  26. # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  27. # IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  28. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  29. # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  30. # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  31. # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  32. # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33. #
  34. #  Command Line Usage: running as `python magic.py file` will print
  35. #                      a description of what 'file' is.
  36. #
  37. #  Module Usage:
  38. #      magic.whatis(data): when passed a string 'data' containing
  39. #                          binary or text data, a description of
  40. #                          what the data is will be returned.
  41. #
  42. #      magic.mime_type(filename): returns a description of what the file
  43. #                            '    filename' contains.
  44. #
  45.  
  46. import re
  47. import struct
  48. import os.path
  49.  
  50. __version__ = '0.2'
  51.  
  52. magic = [
  53.     [0L, 'string', '=', '#define', 'image/x-xbitmap'],
  54.     [0L, 'leshort', '=', 1538L, 'application/x-alan-adventure-game'],
  55.     [0L, 'string', '=', 'TADS', 'application/x-tads-game'],
  56.     [0L, 'short', '=', 420L, 'application/x-executable-file'],
  57.     [0L, 'short', '=', 421L, 'application/x-executable-file'],
  58.     [0L, 'leshort', '=', 603L, 'application/x-executable-file'],
  59.     [0L, 'string', '=', 'Core\001', 'application/x-executable-file'],
  60.     [0L, 'string', '=', 'AMANDA: TAPESTART DATE', 'application/x-amanda-header'],
  61.     [0L, 'belong', '=', 1011L, 'application/x-executable-file'],
  62.     [0L, 'belong', '=', 999L, 'application/x-library-file'],
  63.     [0L, 'belong', '=', 435L, 'video/mpeg'],
  64.     [0L, 'belong', '=', 442L, 'video/mpeg'],
  65.     [0L, 'beshort&0xfff0', '=', 65520L, 'audio/mpeg'],
  66.     [4L, 'leshort', '=', 44817L, 'video/fli'],
  67.     [4L, 'leshort', '=', 44818L, 'video/flc'],
  68.     [0L, 'string', '=', 'MOVI', 'video/x-sgi-movie'],
  69.     [4L, 'string', '=', 'moov', 'video/quicktime'],
  70.     [4L, 'string', '=', 'mdat', 'video/quicktime'],
  71.     [0L, 'long', '=', 100554L, 'application/x-apl-workspace'],
  72.     [0L, 'string', '=', 'FiLeStArTfIlEsTaRt', 'text/x-apple-binscii'],
  73.     [0L, 'string', '=', '\012GL', 'application/data'],
  74.     [0L, 'string', '=', 'v\377', 'application/data'],
  75.     [0L, 'string', '=', 'NuFile', 'application/data'],
  76.     [0L, 'string', '=', 'N\365F\351l\345', 'application/data'],
  77.     [0L, 'belong', '=', 333312L, 'application/data'],
  78.     [0L, 'belong', '=', 333319L, 'application/data'],
  79.     [257L, 'string', '=', 'ustar\000', 'application/x-tar'],
  80.     [257L, 'string', '=', 'ustar  \000', 'application/x-gtar'],
  81.     [0L, 'short', '=', 70707L, 'application/x-cpio'],
  82.     [0L, 'short', '=', 143561L, 'application/x-bcpio'],
  83.     [0L, 'string', '=', '070707', 'application/x-cpio'],
  84.     [0L, 'string', '=', '070701', 'application/x-cpio'],
  85.     [0L, 'string', '=', '070702', 'application/x-cpio'],
  86.     [0L, 'string', '=', '!<arch>\012debian', 'application/x-dpkg'],
  87.     [0L, 'long', '=', 177555L, 'application/x-ar'],
  88.     [0L, 'short', '=', 177555L, 'application/data'],
  89.     [0L, 'long', '=', 177545L, 'application/data'],
  90.     [0L, 'short', '=', 177545L, 'application/data'],
  91.     [0L, 'long', '=', 100554L, 'application/x-apl-workspace'],
  92.     [0L, 'string', '=', '<ar>', 'application/x-ar'],
  93.     [0L, 'string', '=', '!<arch>\012__________E', 'application/x-ar'],
  94.     [0L, 'string', '=', '-h-', 'application/data'],
  95.     [0L, 'string', '=', '!<arch>', 'application/x-ar'],
  96.     [0L, 'string', '=', '<ar>', 'application/x-ar'],
  97.     [0L, 'string', '=', '<ar>', 'application/x-ar'],
  98.     [0L, 'belong', '=', 1711210496L, 'application/x-ar'],
  99.     [0L, 'belong', '=', 1013019198L, 'application/x-ar'],
  100.     [0L, 'long', '=', 557605234L, 'application/x-ar'],
  101.     [0L, 'lelong', '=', 177555L, 'application/data'],
  102.     [0L, 'leshort', '=', 177555L, 'application/data'],
  103.     [0L, 'lelong', '=', 177545L, 'application/data'],
  104.     [0L, 'leshort', '=', 177545L, 'application/data'],
  105.     [0L, 'lelong', '=', 236525L, 'application/data'],
  106.     [0L, 'lelong', '=', 236526L, 'application/data'],
  107.     [0L, 'lelong&0x8080ffff', '=', 2074L, 'application/x-arc'],
  108.     [0L, 'lelong&0x8080ffff', '=', 2330L, 'application/x-arc'],
  109.     [0L, 'lelong&0x8080ffff', '=', 538L, 'application/x-arc'],
  110.     [0L, 'lelong&0x8080ffff', '=', 794L, 'application/x-arc'],
  111.     [0L, 'lelong&0x8080ffff', '=', 1050L, 'application/x-arc'],
  112.     [0L, 'lelong&0x8080ffff', '=', 1562L, 'application/x-arc'],
  113.     [0L, 'string', '=', '\032archive', 'application/data'],
  114.     [0L, 'leshort', '=', 60000L, 'application/x-arj'],
  115.     [0L, 'string', '=', 'HPAK', 'application/data'],
  116.     [0L, 'string', '=', '\351,\001JAM application/data', ''],
  117.     [2L, 'string', '=', '-lh0-', 'application/x-lha'],
  118.     [2L, 'string', '=', '-lh1-', 'application/x-lha'],
  119.     [2L, 'string', '=', '-lz4-', 'application/x-lha'],
  120.     [2L, 'string', '=', '-lz5-', 'application/x-lha'],
  121.     [2L, 'string', '=', '-lzs-', 'application/x-lha'],
  122.     [2L, 'string', '=', '-lh -', 'application/x-lha'],
  123.     [2L, 'string', '=', '-lhd-', 'application/x-lha'],
  124.     [2L, 'string', '=', '-lh2-', 'application/x-lha'],
  125.     [2L, 'string', '=', '-lh3-', 'application/x-lha'],
  126.     [2L, 'string', '=', '-lh4-', 'application/x-lha'],
  127.     [2L, 'string', '=', '-lh5-', 'application/x-lha'],
  128.     [0L, 'string', '=', 'Rar!', 'application/x-rar'],
  129.     [0L, 'string', '=', 'SQSH', 'application/data'],
  130.     [0L, 'string', '=', 'UC2\032', 'application/data'],
  131.     [0L, 'string', '=', 'PK\003\004', 'application/zip'],
  132.     [20L, 'lelong', '=', 4257523676L, 'application/x-zoo'],
  133.     [10L, 'string', '=', '# This is a shell archive', 'application/x-shar'],
  134.     [0L, 'string', '=', '*STA', 'application/data'],
  135.     [0L, 'string', '=', '2278', 'application/data'],
  136.     [0L, 'beshort', '=', 560L, 'application/x-executable-file'],
  137.     [0L, 'beshort', '=', 561L, 'application/x-executable-file'],
  138.     [0L, 'string', '=', '\000\004\036\212\200', 'application/core'],
  139.     [0L, 'string', '=', '.snd', 'audio/basic'],
  140.     [0L, 'lelong', '=', 6583086L, 'audio/basic'],
  141.     [0L, 'string', '=', 'MThd', 'audio/midi'],
  142.     [0L, 'string', '=', 'CTMF', 'audio/x-cmf'],
  143.     [0L, 'string', '=', 'SBI', 'audio/x-sbi'],
  144.     [0L, 'string', '=', 'Creative Voice File', 'audio/x-voc'],
  145.     [0L, 'belong', '=', 1314148939L, 'audio/x-multitrack'],
  146.     [0L, 'string', '=', 'RIFF', 'audio/x-wav'],
  147.     [0L, 'string', '=', 'EMOD', 'audio/x-emod'],
  148.     [0L, 'belong', '=', 779248125L, 'audio/x-pn-realaudio'],
  149.     [0L, 'string', '=', 'MTM', 'audio/x-multitrack'],
  150.     [0L, 'string', '=', 'if', 'audio/x-669-mod'],
  151.     [0L, 'string', '=', 'FAR', 'audio/mod'],
  152.     [0L, 'string', '=', 'MAS_U', 'audio/x-multimate-mod'],
  153.     [44L, 'string', '=', 'SCRM', 'audio/x-st3-mod'],
  154.     [0L, 'string', '=', 'GF1PATCH110\000ID#000002\000','audio/x-gus-patch'],
  155.     [0L, 'string', '=', 'GF1PATCH100\000ID#000002\000', 'audio/x-gus-patch'],
  156.     [0L, 'string', '=', 'JN', 'audio/x-669-mod'],
  157.     [0L, 'string', '=', 'UN05', 'audio/x-mikmod-uni'],
  158.     [0L, 'string', '=', 'Extended Module:', 'audio/x-ft2-mod'],
  159.     [21L, 'string', '=', '!SCREAM!', 'audio/x-st2-mod'],
  160.     [1080L, 'string', '=', 'M.K.', 'audio/x-protracker-mod'],
  161.     [1080L, 'string', '=', 'M!K!', 'audio/x-protracker-mod'],
  162.     [1080L, 'string', '=', 'FLT4', 'audio/x-startracker-mod'],
  163.     [1080L, 'string', '=', '4CHN', 'audio/x-fasttracker-mod'],
  164.     [1080L, 'string', '=', '6CHN', 'audio/x-fasttracker-mod'],
  165.     [1080L, 'string', '=', '8CHN', 'audio/x-fasttracker-mod'],
  166.     [1080L, 'string', '=', 'CD81', 'audio/x-oktalyzer-mod'],
  167.     [1080L, 'string', '=', 'OKTA', 'audio/x-oktalyzer-mod'],
  168.     [1080L, 'string', '=', '16CN', 'audio/x-taketracker-mod'],
  169.     [1080L, 'string', '=', '32CN', 'audio/x-taketracker-mod'],
  170.     [0L, 'string', '=', 'TOC', 'audio/x-toc'],
  171.     [0L, 'short', '=', 3401L, 'application/x-executable-file'],
  172.     [0L, 'long', '=', 406L, 'application/x-executable-file'],
  173.     [0L, 'short', '=', 406L, 'application/x-executable-file'],
  174.     [0L, 'short', '=', 3001L, 'application/x-executable-file'],
  175.     [0L, 'lelong', '=', 314L, 'application/x-executable-file'],
  176.     [0L, 'string', '=', '//', 'text/cpp'],
  177.     [0L, 'string', '=', '\\\\1cw\\', 'application/data'],
  178.     [0L, 'string', '=', '\\\\1cw', 'application/data'],
  179.     [0L, 'belong&0xffffff00', '=', 2231440384L, 'application/data'],
  180.     [0L, 'belong&0xffffff00', '=', 2231487232L, 'application/data'],
  181.     [0L, 'short', '=', 575L, 'application/x-executable-file'],
  182.     [0L, 'short', '=', 577L, 'application/x-executable-file'],
  183.     [4L, 'string', '=', 'pipe', 'application/data'],
  184.     [4L, 'string', '=', 'prof', 'application/data'],
  185.     [0L, 'string', '=', ': shell', 'application/data'],
  186.     [0L, 'string', '=', '#!/bin/sh', 'application/x-sh'],
  187.     [0L, 'string', '=', '#! /bin/sh', 'application/x-sh'],
  188.     [0L, 'string', '=', '#! /bin/sh', 'application/x-sh'],
  189.     [0L, 'string', '=', '#!/bin/csh', 'application/x-csh'],
  190.     [0L, 'string', '=', '#! /bin/csh', 'application/x-csh'],
  191.     [0L, 'string', '=', '#! /bin/csh', 'application/x-csh'],
  192.     [0L, 'string', '=', '#!/bin/ksh', 'application/x-ksh'],
  193.     [0L, 'string', '=', '#! /bin/ksh', 'application/x-ksh'],
  194.     [0L, 'string', '=', '#! /bin/ksh', 'application/x-ksh'],
  195.     [0L, 'string', '=', '#!/bin/tcsh', 'application/x-csh'],
  196.     [0L, 'string', '=', '#! /bin/tcsh', 'application/x-csh'],
  197.     [0L, 'string', '=', '#! /bin/tcsh', 'application/x-csh'],
  198.     [0L, 'string', '=', '#!/usr/local/tcsh', 'application/x-csh'],
  199.     [0L, 'string', '=', '#! /usr/local/tcsh', 'application/x-csh'],
  200.     [0L, 'string', '=', '#!/usr/local/bin/tcsh', 'application/x-csh'],
  201.     [0L, 'string', '=', '#! /usr/local/bin/tcsh', 'application/x-csh'],
  202.     [0L, 'string', '=', '#! /usr/local/bin/tcsh', 'application/x-csh'],
  203.     [0L, 'string', '=', '#!/usr/local/bin/zsh', 'application/x-zsh'],
  204.     [0L, 'string', '=', '#! /usr/local/bin/zsh', 'application/x-zsh'],
  205.     [0L, 'string', '=', '#! /usr/local/bin/zsh', 'application/x-zsh'],
  206.     [0L, 'string', '=', '#!/usr/local/bin/ash', 'application/x-sh'],
  207.     [0L, 'string', '=', '#! /usr/local/bin/ash', 'application/x-zsh'],
  208.     [0L, 'string', '=', '#! /usr/local/bin/ash', 'application/x-zsh'],
  209.     [0L, 'string', '=', '#!/usr/local/bin/ae', 'text/script'],
  210.     [0L, 'string', '=', '#! /usr/local/bin/ae', 'text/script'],
  211.     [0L, 'string', '=', '#! /usr/local/bin/ae', 'text/script'],
  212.     [0L, 'string', '=', '#!/bin/nawk', 'application/x-awk'],
  213.     [0L, 'string', '=', '#! /bin/nawk', 'application/x-awk'],
  214.     [0L, 'string', '=', '#! /bin/nawk', 'application/x-awk'],
  215.     [0L, 'string', '=', '#!/usr/bin/nawk', 'application/x-awk'],
  216.     [0L, 'string', '=', '#! /usr/bin/nawk', 'application/x-awk'],
  217.     [0L, 'string', '=', '#! /usr/bin/nawk', 'application/x-awk'],
  218.     [0L, 'string', '=', '#!/usr/local/bin/nawk', 'application/x-awk'],
  219.     [0L, 'string', '=', '#! /usr/local/bin/nawk', 'application/x-awk'],
  220.     [0L, 'string', '=', '#! /usr/local/bin/nawk', 'application/x-awk'],
  221.     [0L, 'string', '=', '#!/bin/gawk', 'application/x-awk'],
  222.     [0L, 'string', '=', '#! /bin/gawk', 'application/x-awk'],
  223.     [0L, 'string', '=', '#! /bin/gawk', 'application/x-awk'],
  224.     [0L, 'string', '=', '#!/usr/bin/gawk', 'application/x-awk'],
  225.     [0L, 'string', '=', '#! /usr/bin/gawk', 'application/x-awk'],
  226.     [0L, 'string', '=', '#! /usr/bin/gawk', 'application/x-awk'],
  227.     [0L, 'string', '=', '#!/usr/local/bin/gawk', 'application/x-awk'],
  228.     [0L, 'string', '=', '#! /usr/local/bin/gawk', 'application/x-awk'],
  229.     [0L, 'string', '=', '#! /usr/local/bin/gawk', 'application/x-awk'],
  230.     [0L, 'string', '=', '#!/bin/awk', 'application/x-awk'],
  231.     [0L, 'string', '=', '#! /bin/awk', 'application/x-awk'],
  232.     [0L, 'string', '=', '#! /bin/awk', 'application/x-awk'],
  233.     [0L, 'string', '=', '#!/usr/bin/awk', 'application/x-awk'],
  234.     [0L, 'string', '=', '#! /usr/bin/awk', 'application/x-awk'],
  235.     [0L, 'string', '=', '#! /usr/bin/awk', 'application/x-awk'],
  236.     [0L, 'string', '=', 'BEGIN', 'application/x-awk'],
  237.     [0L, 'string', '=', '#!/bin/perl', 'application/x-perl'],
  238.     [0L, 'string', '=', '#! /bin/perl', 'application/x-perl'],
  239.     [0L, 'string', '=', '#! /bin/perl', 'application/x-perl'],
  240.     [0L, 'string', '=', 'eval "exec /bin/perl', 'application/x-perl'],
  241.     [0L, 'string', '=', '#!/usr/bin/perl', 'application/x-perl'],
  242.     [0L, 'string', '=', '#! /usr/bin/perl', 'application/x-perl'],
  243.     [0L, 'string', '=', '#! /usr/bin/perl', 'application/x-perl'],
  244.     [0L, 'string', '=', 'eval "exec /usr/bin/perl', 'application/x-perl'],
  245.     [0L, 'string', '=', '#!/usr/local/bin/perl', 'application/x-perl'],
  246.     [0L, 'string', '=', '#! /usr/local/bin/perl', 'application/x-perl'],
  247.     [0L, 'string', '=', '#! /usr/local/bin/perl', 'application/x-perl'],
  248.     [0L, 'string', '=', 'eval "exec /usr/local/bin/perl', 'application/x-perl'],
  249.     [0L, 'string', '=', '#!/bin/python', 'application/x-python'],
  250.     [0L, 'string', '=', '#! /bin/python', 'application/x-python'],
  251.     [0L, 'string', '=', '#! /bin/python', 'application/x-python'],
  252.     [0L, 'string', '=', 'eval "exec /bin/python', 'application/x-python'],
  253.     [0L, 'string', '=', '#!/usr/bin/python', 'application/x-python'],
  254.     [0L, 'string', '=', '#! /usr/bin/python', 'application/x-python'],
  255.     [0L, 'string', '=', '#! /usr/bin/python', 'application/x-python'],
  256.     [0L, 'string', '=', 'eval "exec /usr/bin/python', 'application/x-python'],
  257.     [0L, 'string', '=', '#!/usr/local/bin/python', 'application/x-python'],
  258.     [0L, 'string', '=', '#! /usr/local/bin/python', 'application/x-python'],
  259.     [0L, 'string', '=', '#! /usr/local/bin/python', 'application/x-python'],
  260.     [0L, 'string', '=', 'eval "exec /usr/local/bin/python', 'application/x-python'],
  261.     [0L, 'string', '=', '#!/usr/bin/env python', 'application/x-python'],
  262.     [0L, 'string', '=', '#! /usr/bin/env python', 'application/x-python'],
  263.     [0L, 'string', '=', '#!/bin/rc', 'text/script'],
  264.     [0L, 'string', '=', '#! /bin/rc', 'text/script'],
  265.     [0L, 'string', '=', '#! /bin/rc', 'text/script'],
  266.     [0L, 'string', '=', '#!/bin/bash', 'application/x-sh'],
  267.     [0L, 'string', '=', '#! /bin/bash', 'application/x-sh'],
  268.     [0L, 'string', '=', '#! /bin/bash', 'application/x-sh'],
  269.     [0L, 'string', '=', '#!/usr/local/bin/bash', 'application/x-sh'],
  270.     [0L, 'string', '=', '#! /usr/local/bin/bash', 'application/x-sh'],
  271.     [0L, 'string', '=', '#! /usr/local/bin/bash', 'application/x-sh'],
  272.     [0L, 'string', '=', '#! /', 'text/script'],
  273.     [0L, 'string', '=', '#! /', 'text/script'],
  274.     [0L, 'string', '=', '#!/', 'text/script'],
  275.     [0L, 'string', '=', '#! text/script', ''],
  276.     [0L, 'string', '=', '\037\235', 'application/compress'],
  277.     [0L, 'string', '=', '\037\213', 'application/x-gzip'],
  278.     [0L, 'string', '=', '\037\036', 'application/data'],
  279.     [0L, 'short', '=', 17437L, 'application/data'],
  280.     [0L, 'short', '=', 8191L, 'application/data'],
  281.     [0L, 'string', '=', '\377\037', 'application/data'],
  282.     [0L, 'short', '=', 145405L, 'application/data'],
  283.     [0L, 'string', '=', 'BZh', 'application/x-bzip2'],
  284.     [0L, 'leshort', '=', 65398L, 'application/data'],
  285.     [0L, 'leshort', '=', 65142L, 'application/data'],
  286.     [0L, 'leshort', '=', 64886L, 'application/x-lzh'],
  287.     [0L, 'string', '=', '\037\237', 'application/data'],
  288.     [0L, 'string', '=', '\037\236', 'application/data'],
  289.     [0L, 'string', '=', '\037\240', 'application/data'],
  290.     [0L, 'string', '=', 'BZ', 'application/x-bzip'],
  291.     [0L, 'string', '=', '\211LZO\000\015\012\032\012',
  292.      'application/data'],
  293.     [0L, 'belong', '=', 507L, 'application/x-object-file'],
  294.     [0L, 'belong', '=', 513L, 'application/x-executable-file'],
  295.     [0L, 'belong', '=', 515L, 'application/x-executable-file'],
  296.     [0L, 'belong', '=', 517L, 'application/x-executable-file'],
  297.     [0L, 'belong', '=', 70231L, 'application/core'],
  298.     [24L, 'belong', '=', 60011L, 'application/data'],
  299.     [24L, 'belong', '=', 60012L, 'application/data'],
  300.     [24L, 'belong', '=', 60013L, 'application/data'],
  301.     [24L, 'belong', '=', 60014L, 'application/data'],
  302.     [0L, 'belong', '=', 601L, 'application/x-object-file'],
  303.     [0L, 'belong', '=', 607L, 'application/data'],
  304.     [0L, 'belong', '=', 324508366L, 'application/x-gdbm'],
  305.     [0L, 'lelong', '=', 324508366L, 'application/x-gdbm'],
  306.     [0L, 'string', '=', 'GDBM', 'application/x-gdbm'],
  307.     [0L, 'belong', '=', 398689L, 'application/x-db'],
  308.     [0L, 'belong', '=', 340322L, 'application/x-db'],
  309.     [0L, 'string', '=', '<list>\012<protocol bbn-m', 'application/data'],
  310.     [0L, 'string', '=', 'diff text/x-patch', ''],
  311.     [0L, 'string', '=', '*** text/x-patch', ''],
  312.     [0L, 'string', '=', 'Only in text/x-patch', ''],
  313.     [0L, 'string', '=', 'Common subdirectories: text/x-patch', ''],
  314.     [0L, 'string', '=', '!<arch>\012________64E', 'application/data'],
  315.     [0L, 'leshort', '=', 387L, 'application/x-executable-file'],
  316.     [0L, 'leshort', '=', 392L, 'application/x-executable-file'],
  317.     [0L, 'leshort', '=', 399L, 'application/x-object-file'],
  318.     [0L, 'string', '=', '\377\377\177', 'application/data'],
  319.     [0L, 'string', '=', '\377\377|', 'application/data'],
  320.     [0L, 'string', '=', '\377\377~', 'application/data'],
  321.     [0L, 'string', '=', '\033c\033', 'application/data'],
  322.     [0L, 'long', '=', 4553207L, 'image/x11'],
  323.     [0L, 'string', '=', '!<PDF>!\012', 'application/x-prof'],
  324.     [0L, 'short', '=', 1281L, 'application/x-locale'],
  325.     [24L, 'belong', '=', 60012L, 'application/x-dump'],
  326.     [24L, 'belong', '=', 60011L, 'application/x-dump'],
  327.     [24L, 'lelong', '=', 60012L, 'application/x-dump'],
  328.     [24L, 'lelong', '=', 60011L, 'application/x-dump'],
  329.     [0L, 'string', '=', '\177ELF', 'application/x-executable-file'],
  330.     [0L, 'short', '=', 340L, 'application/data'],
  331.     [0L, 'short', '=', 341L, 'application/x-executable-file'],
  332.     [1080L, 'leshort', '=', 61267L, 'application/x-linux-ext2fs'],
  333.     [0L, 'string', '=', '\366\366\366\366', 'application/x-pc-floppy'],
  334.     [774L, 'beshort', '=', 55998L, 'application/data'],
  335.     [510L, 'leshort', '=', 43605L, 'application/data'],
  336.     [1040L, 'leshort', '=', 4991L, 'application/x-filesystem'],
  337.     [1040L, 'leshort', '=', 5007L, 'application/x-filesystem'],
  338.     [1040L, 'leshort', '=', 9320L, 'application/x-filesystem'],
  339.     [1040L, 'leshort', '=', 9336L, 'application/x-filesystem'],
  340.     [0L, 'string', '=', '-rom1fs-\000', 'application/x-filesystem'],
  341.     [395L, 'string', '=', 'OS/2', 'application/x-bootable'],
  342.     [0L, 'string', '=', 'FONT', 'font/x-vfont'],
  343.     [0L, 'short', '=', 436L, 'font/x-vfont'],
  344.     [0L, 'short', '=', 17001L, 'font/x-vfont'],
  345.     [0L, 'string', '=', '%!PS-AdobeFont-1.0', 'font/type1'],
  346.     [6L, 'string', '=', '%!PS-AdobeFont-1.0', 'font/type1'],
  347.     [0L, 'belong', '=', 4L, 'font/x-snf'],
  348.     [0L, 'lelong', '=', 4L, 'font/x-snf'],
  349.     [0L, 'string', '=', 'STARTFONT font/x-bdf', ''],
  350.     [0L, 'string', '=', '\001fcp', 'font/x-pcf'],
  351.     [0L, 'string', '=', 'D1.0\015', 'font/x-speedo'],
  352.     [0L, 'string', '=', 'flf', 'font/x-figlet'],
  353.     [0L, 'string', '=', 'flc', 'application/x-font'],
  354.     [0L, 'belong', '=', 335698201L, 'font/x-libgrx'],
  355.     [0L, 'belong', '=', 4282797902L, 'font/x-dos'],
  356.     [7L, 'belong', '=', 4540225L, 'font/x-dos'],
  357.     [7L, 'belong', '=', 5654852L, 'font/x-dos'],
  358.     [4098L, 'string', '=', 'DOSFONT', 'font/x-dos'],
  359.     [0L, 'string', '=', '<MakerFile', 'application/x-framemaker'],
  360.     [0L, 'string', '=', '<MIFFile', 'application/x-framemaker'],
  361.     [0L, 'string', '=', '<MakerDictionary', 'application/x-framemaker'],
  362.     [0L, 'string', '=', '<MakerScreenFont', 'font/x-framemaker'],
  363.     [0L, 'string', '=', '<MML', 'application/x-framemaker'],
  364.     [0L, 'string', '=', '<BookFile', 'application/x-framemaker'],
  365.     [0L, 'string', '=', '<Maker', 'application/x-framemaker'],
  366.     [0L, 'lelong&0377777777', '=', 41400407L,
  367.      'application/x-executable-file'],
  368.     [0L, 'lelong&0377777777', '=', 41400410L,
  369.      'application/x-executable-file'],
  370.     [0L, 'lelong&0377777777', '=', 41400413L,
  371.      'application/x-executable-file'],
  372.     [0L, 'lelong&0377777777', '=', 41400314L,
  373.      'application/x-executable-file'],
  374.     [7L, 'string', '=',
  375.      '\357\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000',
  376.      'application/core'],
  377.     [0L, 'lelong', '=', 11421044151L, 'application/data'],
  378.     [0L, 'string', '=', 'GIMP Gradient', 'application/x-gimp-gradient'],
  379.     [0L, 'string', '=', 'gimp xcf', 'application/x-gimp-image'],
  380.     [20L, 'string', '=', 'GPAT', 'application/x-gimp-pattern'],
  381.     [20L, 'string', '=', 'GIMP', 'application/x-gimp-brush'],
  382.     [0L, 'string', '=', '\336\022\004\225', 'application/x-locale'],
  383.     [0L, 'string', '=', '\225\004\022\336', 'application/x-locale'],
  384.     [0L, 'beshort', '=', 627L, 'application/x-executable-file'],
  385.     [0L, 'beshort', '=', 624L, 'application/x-executable-file'],
  386.     [0L, 'string', '=', '\000\001\000\000\000', 'font/ttf'],
  387.     [0L, 'long', '=', 1203604016L, 'application/data'],
  388.     [0L, 'long', '=', 1702407010L, 'application/data'],
  389.     [0L, 'long', '=', 1003405017L, 'application/data'],
  390.     [0L, 'long', '=', 1602007412L, 'application/data'],
  391.     [0L, 'belong', '=', 34603270L, 'application/x-object-file'],
  392.     [0L, 'belong', '=', 34603271L, 'application/x-executable-file'],
  393.     [0L, 'belong', '=', 34603272L, 'application/x-executable-file'],
  394.     [0L, 'belong', '=', 34603275L, 'application/x-executable-file'],
  395.     [0L, 'belong', '=', 34603278L, 'application/x-library-file'],
  396.     [0L, 'belong', '=', 34603277L, 'application/x-library-file'],
  397.     [0L, 'belong', '=', 34865414L, 'application/x-object-file'],
  398.     [0L, 'belong', '=', 34865415L, 'application/x-executable-file'],
  399.     [0L, 'belong', '=', 34865416L, 'application/x-executable-file'],
  400.     [0L, 'belong', '=', 34865419L, 'application/x-executable-file'],
  401.     [0L, 'belong', '=', 34865422L, 'application/x-library-file'],
  402.     [0L, 'belong', '=', 34865421L, 'application/x-object-file'],
  403.     [0L, 'belong', '=', 34275590L, 'application/x-object-file'],
  404.     [0L, 'belong', '=', 34275591L, 'application/x-executable-file'],
  405.     [0L, 'belong', '=', 34275592L, 'application/x-executable-file'],
  406.     [0L, 'belong', '=', 34275595L, 'application/x-executable-file'],
  407.     [0L, 'belong', '=', 34275598L, 'application/x-library-file'],
  408.     [0L, 'belong', '=', 34275597L, 'application/x-library-file'],
  409.     [0L, 'belong', '=', 557605234L, 'application/x-ar'],
  410.     [0L, 'long', '=', 34078982L, 'application/x-executable-file'],
  411.     [0L, 'long', '=', 34078983L, 'application/x-executable-file'],
  412.     [0L, 'long', '=', 34078984L, 'application/x-executable-file'],
  413.     [0L, 'belong', '=', 34341128L, 'application/x-executable-file'],
  414.     [0L, 'belong', '=', 34341127L, 'application/x-executable-file'],
  415.     [0L, 'belong', '=', 34341131L, 'application/x-executable-file'],
  416.     [0L, 'belong', '=', 34341126L, 'application/x-executable-file'],
  417.     [0L, 'belong', '=', 34210056L, 'application/x-executable-file'],
  418.     [0L, 'belong', '=', 34210055L, 'application/x-executable-file'],
  419.     [0L, 'belong', '=', 34341134L, 'application/x-library-file'],
  420.     [0L, 'belong', '=', 34341133L, 'application/x-library-file'],
  421.     [0L, 'long', '=', 65381L, 'application/x-library-file'],
  422.     [0L, 'long', '=', 34275173L, 'application/x-library-file'],
  423.     [0L, 'long', '=', 34406245L, 'application/x-library-file'],
  424.     [0L, 'long', '=', 34144101L, 'application/x-library-file'],
  425.     [0L, 'long', '=', 22552998L, 'application/core'],
  426.     [0L, 'long', '=', 1302851304L, 'font/x-hp-windows'],
  427.     [0L, 'string', '=', 'Bitmapfile', 'image/unknown'],
  428.     [0L, 'string', '=', 'IMGfile', 'CIS image/unknown'],
  429.     [0L, 'long', '=', 34341132L, 'application/x-lisp'],
  430.     [0L, 'string', '=', 'msgcat01', 'application/x-locale'],
  431.     [0L, 'string', '=', 'HPHP48-', 'HP48 binary'],
  432.     [0L, 'string', '=', '%%HP:', 'HP48 text'],
  433.     [0L, 'beshort', '=', 200L, 'hp200 (68010) BSD'],
  434.     [0L, 'beshort', '=', 300L, 'hp300 (68020+68881) BSD'],
  435.     [0L, 'beshort', '=', 537L, '370 XA sysV executable'],
  436.     [0L, 'beshort', '=', 532L, '370 XA sysV pure executable'],
  437.     [0L, 'beshort', '=', 54001L, '370 sysV pure executable'],
  438.     [0L, 'beshort', '=', 55001L, '370 XA sysV pure executable'],
  439.     [0L, 'beshort', '=', 56401L, '370 sysV executable'],
  440.     [0L, 'beshort', '=', 57401L, '370 XA sysV executable'],
  441.     [0L, 'beshort', '=', 531L, 'SVR2 executable (Amdahl-UTS)'],
  442.     [0L, 'beshort', '=', 534L, 'SVR2 pure executable (Amdahl-UTS)'],
  443.     [0L, 'beshort', '=', 530L, 'SVR2 pure executable (USS/370)'],
  444.     [0L, 'beshort', '=', 535L, 'SVR2 executable (USS/370)'],
  445.     [0L, 'beshort', '=', 479L, 'executable (RISC System/6000 V3.1) or obj module'],
  446.     [0L, 'beshort', '=', 260L, 'shared library'],
  447.     [0L, 'beshort', '=', 261L, 'ctab data'],
  448.     [0L, 'beshort', '=', 65028L, 'structured file'],
  449.     [0L, 'string', '=', '0xabcdef', 'AIX message catalog'],
  450.     [0L, 'belong', '=', 505L, 'AIX compiled message catalog'],
  451.     [0L, 'string', '=', '<aiaff>', 'archive'],
  452.     [0L, 'string', '=', 'FORM', 'IFF data'],
  453.     [0L, 'string', '=', 'P1', 'image/x-portable-bitmap'],
  454.     [0L, 'string', '=', 'P2', 'image/x-portable-graymap'],
  455.     [0L, 'string', '=', 'P3', 'image/x-portable-pixmap'],
  456.     [0L, 'string', '=', 'P4', 'image/x-portable-bitmap'],
  457.     [0L, 'string', '=', 'P5', 'image/x-portable-graymap'],
  458.     [0L, 'string', '=', 'P6', 'image/x-portable-pixmap'],
  459.     [0L, 'string', '=', 'IIN1', 'image/tiff'],
  460.     [0L, 'string', '=', 'MM\000*', 'image/tiff'],
  461.     [0L, 'string', '=', 'II*\000', 'image/tiff'],
  462.     [0L, 'string', '=', '\211PNG', 'image/png'],
  463.     [1L, 'string', '=', 'PNG', 'image/png'],
  464.     [0L, 'string', '=', 'GIF8', 'image/gif'],
  465.     [0L, 'string', '=', '\361\000@\273', 'image/x-cmu-raster'],
  466.     [0L, 'string', '=', 'id=ImageMagick', 'MIFF image data'],
  467.     [0L, 'long', '=', 1123028772L, 'Artisan image data'],
  468.     [0L, 'string', '=', '#FIG', 'FIG image text'],
  469.     [0L, 'string', '=', 'ARF_BEGARF', 'PHIGS clear text archive'],
  470.     [0L, 'string', '=', '@(#)SunPHIGS', 'SunPHIGS'],
  471.     [0L, 'string', '=', 'GKSM', 'GKS Metafile'],
  472.     [0L, 'string', '=', 'BEGMF', 'clear text Computer Graphics Metafile'],
  473.     [0L, 'beshort&0xffe0', '=', 32L, 'binary Computer Graphics Metafile'],
  474.     [0L, 'beshort', '=', 12320L, 'character Computer Graphics Metafile'],
  475.     [0L, 'string', '=', 'yz', 'MGR bitmap, modern format, 8-bit aligned'],
  476.     [0L, 'string', '=', 'zz','MGR bitmap, old format, 1-bit deep, 16-bit aligned'],
  477.     [0L, 'string', '=', 'xz','MGR bitmap, old format, 1-bit deep, 32-bit aligned'],
  478.     [0L, 'string', '=', 'yx', 'MGR bitmap, modern format, squeezed'],
  479.     [0L, 'string', '=', '%bitmap\000', 'FBM image data'],
  480.     [1L, 'string', '=', 'PC Research, Inc', 'group 3 fax data'],
  481.     [0L, 'string', '=', 'hplip_g3', 'application/hplip-fax'],
  482.     [0L, 'beshort', '=', 65496L, 'image/jpeg'],
  483.     [0L, 'string', '=', 'hsi1', 'image/x-jpeg-proprietary'],
  484.     [0L, 'string', '=', 'BM', 'image/x-bmp'],
  485.     [0L, 'string', '=', 'IC', 'image/x-ico'],
  486.     [0L, 'string', '=', 'PI', 'PC pointer image data'],
  487.     [0L, 'string', '=', 'CI', 'PC color icon data'],
  488.     [0L, 'string', '=', 'CP', 'PC color pointer image data'],
  489.     [0L, 'string', '=', '/* XPM */', 'image/x-xpixmap'],
  490.     [0L, 'leshort', '=', 52306L, 'RLE image data,'],
  491.     [0L, 'string', '=', 'Imagefile version-', 'iff image data'],
  492.     [0L, 'belong', '=', 1504078485L, 'image/x-sun-raster'],
  493.     [0L, 'beshort', '=', 474L, 'x/x-image-sgi'],
  494.     [0L, 'string', '=', 'IT01', 'FIT image data'],
  495.     [0L, 'string', '=', 'IT02', 'FIT image data'],
  496.     [2048L, 'string', '=', 'PCD_IPI', 'x/x-photo-cd-pack-file'],
  497.     [0L, 'string', '=', 'PCD_OPA', 'x/x-photo-cd-overfiew-file'],
  498.     [0L, 'string', '=', 'SIMPLE  =', 'FITS image data'],
  499.     [0L, 'string', '=', 'This is a BitMap file', 'Lisp Machine bit-array-file'],
  500.     [0L, 'string', '=', '!!', 'Bennet Yee\'s "face" format'],
  501.     [0L, 'beshort', '=', 4112L, 'PEX Binary Archive'],
  502.     [3000L, 'string', '=', 'Visio (TM) Drawing', '%s'],
  503.     [0L, 'leshort', '=', 502L, 'basic-16 executable'],
  504.     [0L, 'leshort', '=', 503L, 'basic-16 executable (TV)'],
  505.     [0L, 'leshort', '=', 510L, 'application/x-executable-file'],
  506.     [0L, 'leshort', '=', 511L, 'application/x-executable-file'],
  507.     [0L, 'leshort', '=', 512L, 'application/x-executable-file'],
  508.     [0L, 'leshort', '=', 522L, 'application/x-executable-file'],
  509.     [0L, 'leshort', '=', 514L, 'application/x-executable-file'],
  510.     [0L, 'string', '=', '\210OPS', 'Interleaf saved data'],
  511.     [0L, 'string', '=', '<!OPS', 'Interleaf document text'],
  512.     [4L, 'string', '=', 'pgscriptver', 'IslandWrite document'],
  513.     [13L, 'string', '=', 'DrawFile', 'IslandDraw document'],
  514.     [0L, 'leshort&0xFFFC', '=', 38400L, 'little endian ispell'],
  515.     [0L, 'beshort&0xFFFC', '=', 38400L, 'big endian ispell'],
  516.     [0L, 'belong', '=', 3405691582L, 'compiled Java class data,'],
  517.     [0L, 'beshort', '=', 44269L, 'Java serialization data'],
  518.     [0L, 'string', '=', 'KarmaRHD', 'Version Karma Data Structure Version'],
  519.     [0L, 'string', '=', 'lect', 'DEC SRC Virtual Paper Lectern file'],
  520.     [53L, 'string', '=', 'yyprevious', 'C program text (from lex)'],
  521.     [21L, 'string', '=', 'generated by flex', 'C program text (from flex)'],
  522.     [0L, 'string', '=', '%{', 'lex description text'],
  523.     [0L, 'short', '=', 32768L, 'lif file'],
  524.     [0L, 'lelong', '=', 6553863L, 'Linux/i386 impure executable (OMAGIC)'],
  525.     [0L, 'lelong', '=', 6553864L, 'Linux/i386 pure executable (NMAGIC)'],
  526.     [0L, 'lelong', '=', 6553867L, 'Linux/i386 demand-paged executable (ZMAGIC)'],
  527.     [0L, 'lelong', '=', 6553804L, 'Linux/i386 demand-paged executable (QMAGIC)'],
  528.     [0L, 'string', '=', '\007\001\000', 'Linux/i386 object file'],
  529.     [0L, 'string', '=', '\001\003\020\004', 'Linux-8086 impure executable'],
  530.     [0L, 'string', '=', '\001\003 \004', 'Linux-8086 executable'],
  531.     [0L, 'string', '=', '\243\206\001\000', 'Linux-8086 object file'],
  532.     [0L, 'string', '=', '\001\003\020\020', 'Minix-386 impure executable'],
  533.     [0L, 'string', '=', '\001\003 \020', 'Minix-386 executable'],
  534.     [0L, 'string', '=', '*nazgul*', 'Linux compiled message catalog'],
  535.     [216L, 'lelong', '=', 421L, 'Linux/i386 core file'],
  536.     [2L, 'string', '=', 'LILO', 'Linux/i386 LILO boot/chain loader'],
  537.     [0L, 'string', '=', '0.9', ''],
  538.     [0L, 'leshort', '=', 1078L, 'font/linux-psf'],
  539.     [4086L, 'string', '=', 'SWAP-SPACE', 'Linux/i386 swap file'],
  540.     [0L, 'leshort', '=', 387L, 'ECOFF alpha'],
  541.     [514L, 'string', '=', 'HdrS', 'Linux kernel'],
  542.     [0L, 'belong', '=', 3099592590L, 'Linux kernel'],
  543.     [0L, 'string', '=', 'Begin3', 'Linux Software Map entry text'],
  544.     [0L, 'string', '=', ';;', 'Lisp/Scheme program text'],
  545.     [0L, 'string', '=', '\012(', 'byte-compiled Emacs-Lisp program data'],
  546.     [0L, 'string', '=', ';ELC\023\000\000\000', 'byte-compiled Emacs-Lisp program data'],
  547.     [0L, 'string', '=', "(SYSTEM::VERSION '", 'CLISP byte-compiled Lisp program text'],
  548.     [0L, 'long', '=', 1886817234L, 'CLISP memory image data'],
  549.     [0L, 'long', '=', 3532355184L, 'CLISP memory image data, other endian'],
  550.     [0L, 'long', '=', 3725722773L, 'GNU-format message catalog data'],
  551.     [0L, 'long', '=', 2500072158L, 'GNU-format message catalog data'],
  552.     [0L, 'belong', '=', 3405691582L, 'mach-o fat file'],
  553.     [0L, 'belong', '=', 4277009102L, 'mach-o'],
  554.     [11L, 'string', '=', 'must be converted with BinHex', 'BinHex binary text'],
  555.     [0L, 'string', '=', 'SIT!', 'StuffIt Archive (data)'],
  556.     [65L, 'string', '=', 'SIT!', 'StuffIt Archive (rsrc + data)'],
  557.     [0L, 'string', '=', 'SITD', 'StuffIt Deluxe (data)'],
  558.     [65L, 'string', '=', 'SITD', 'StuffIt Deluxe (rsrc + data)'],
  559.     [0L, 'string', '=', 'Seg', 'StuffIt Deluxe Segment (data)'],
  560.     [65L, 'string', '=', 'Seg', 'StuffIt Deluxe Segment (rsrc + data)'],
  561.     [0L, 'string', '=', 'APPL', 'Macintosh Application (data)'],
  562.     [65L, 'string', '=', 'APPL', 'Macintosh Application (rsrc + data)'],
  563.     [0L, 'string', '=', 'zsys', 'Macintosh System File (data)'],
  564.     [65L, 'string', '=', 'zsys', 'Macintosh System File(rsrc + data)'],
  565.     [0L, 'string', '=', 'FNDR', 'Macintosh Finder (data)'],
  566.     [65L, 'string', '=', 'FNDR', 'Macintosh Finder(rsrc + data)'],
  567.     [0L, 'string', '=', 'libr', 'Macintosh Library (data)'],
  568.     [65L, 'string', '=', 'libr', 'Macintosh Library(rsrc + data)'],
  569.     [0L, 'string', '=', 'shlb', 'Macintosh Shared Library (data)'],
  570.     [65L, 'string', '=', 'shlb', 'Macintosh Shared Library(rsrc + data)'],
  571.     [0L, 'string', '=', 'cdev', 'Macintosh Control Panel (data)'],
  572.     [65L, 'string', '=', 'cdev', 'Macintosh Control Panel(rsrc + data)'],
  573.     [0L, 'string', '=', 'INIT', 'Macintosh Extension (data)'],
  574.     [65L, 'string', '=', 'INIT', 'Macintosh Extension(rsrc + data)'],
  575.     [0L, 'string', '=', 'FFIL', 'font/ttf'],
  576.     [65L, 'string', '=', 'FFIL', 'font/ttf'],
  577.     [0L, 'string', '=', 'LWFN', 'font/type1'],
  578.     [65L, 'string', '=', 'LWFN', 'font/type1'],
  579.     [0L, 'string', '=', 'PACT', 'Macintosh Compact Pro Archive (data)'],
  580.     [65L, 'string', '=', 'PACT', 'Macintosh Compact Pro Archive(rsrc + data)'],
  581.     [0L, 'string', '=', 'ttro', 'Macintosh TeachText File (data)'],
  582.     [65L, 'string', '=', 'ttro', 'Macintosh TeachText File(rsrc + data)'],
  583.     [0L, 'string', '=', 'TEXT', 'Macintosh TeachText File (data)'],
  584.     [65L, 'string', '=', 'TEXT', 'Macintosh TeachText File(rsrc + data)'],
  585.     [0L, 'string', '=', 'PDF', 'Macintosh PDF File (data)'],
  586.     [65L, 'string', '=', 'PDF', 'Macintosh PDF File(rsrc + data)'],
  587.     [0L, 'string', '=', '# Magic', 'magic text file for file(1) cmd'],
  588.     [0L, 'string', '=', 'Relay-Version:', 'old news text'],
  589.     [0L, 'string', '=', '#! rnews', 'batched news text'],
  590.     [0L, 'string', '=', 'N#! rnews', 'mailed, batched news text'],
  591.     [0L, 'string', '=', 'Forward to', 'mail forwarding text'],
  592.     [0L, 'string', '=', 'Pipe to', 'mail piping text'],
  593.     [0L, 'string', '=', 'Return-Path:', 'message/rfc822'],
  594.     [0L, 'string', '=', 'Path:', 'message/news'],
  595.     [0L, 'string', '=', 'Xref:', 'message/news'],
  596.     [0L, 'string', '=', 'From:', 'message/rfc822'],
  597.     [0L, 'string', '=', 'Article', 'message/news'],
  598.     [0L, 'string', '=', 'BABYL', 'message/x-gnu-rmail'],
  599.     [0L, 'string', '=', 'Received:', 'message/rfc822'],
  600.     [0L, 'string', '=', 'MIME-Version:', 'MIME entity text'],
  601.     [0L, 'string', '=', 'Content-Type: ', ''],
  602.     [0L, 'string', '=', 'Content-Type:', ''],
  603.     [0L, 'long', '=', 31415L, 'Mirage Assembler m.out executable'],
  604.     [0L, 'string', '=', '\311\304', 'ID tags data'],
  605.     [0L, 'string', '=', '\001\001\001\001', 'MMDF mailbox'],
  606.     [4L, 'string', '=', 'Research,', 'Digifax-G3-File'],
  607.     [0L, 'short', '=', 256L, 'raw G3 data, byte-padded'],
  608.     [0L, 'short', '=', 5120L, 'raw G3 data'],
  609.     [0L, 'string', '=', 'RMD1', 'raw modem data'],
  610.     [0L, 'string', '=', 'PVF1\012', 'portable voice format'],
  611.     [0L, 'string', '=', 'PVF2\012', 'portable voice format'],
  612.     [0L, 'beshort', '=', 520L, 'mc68k COFF'],
  613.     [0L, 'beshort', '=', 521L, 'mc68k executable (shared)'],
  614.     [0L, 'beshort', '=', 522L, 'mc68k executable (shared demand paged)'],
  615.     [0L, 'beshort', '=', 554L, '68K BCS executable'],
  616.     [0L, 'beshort', '=', 555L, '88K BCS executable'],
  617.     [0L, 'string', '=', 'S0', 'Motorola S-Record; binary data in text format'],
  618.     [0L, 'string', '=', '@echo off', 'MS-DOS batch file text'],
  619.     [128L, 'string', '=', 'PE\000\000', 'MS Windows PE'],
  620.     [0L, 'leshort', '=', 332L, 'MS Windows COFF Intel 80386 object file'],
  621.     [0L, 'leshort', '=', 358L, 'MS Windows COFF MIPS R4000 object file'],
  622.     [0L, 'leshort', '=', 388L, 'MS Windows COFF Alpha object file'],
  623.     [0L, 'leshort', '=', 616L, 'MS Windows COFF Motorola 68000 object file'],
  624.     [0L, 'leshort', '=', 496L, 'MS Windows COFF PowerPC object file'],
  625.     [0L, 'leshort', '=', 656L, 'MS Windows COFF PA-RISC object file'],
  626.     [0L, 'string', '=', 'MZ', 'application/x-ms-dos-executable'],
  627.     [0L, 'string', '=', 'LZ', 'MS-DOS executable (built-in)'],
  628.     [0L, 'string', '=', 'regf', 'Windows NT Registry file'],
  629.     [2080L, 'string', '=', 'Microsoft Word 6.0 Document', 'text/vnd.ms-word'],
  630.     [2080L, 'string', '=', 'Documento Microsoft Word 6', 'text/vnd.ms-word'],
  631.     [2112L, 'string', '=', 'MSWordDoc', 'text/vnd.ms-word'],
  632.     [0L, 'belong', '=', 834535424L, 'text/vnd.ms-word'],
  633.     [0L, 'string', '=', 'PO^Q`', 'text/vnd.ms-word'],
  634.     [2080L, 'string', '=', 'Microsoft Excel 5.0 Worksheet', 'application/vnd.ms-excel'],
  635.     [2114L, 'string', '=', 'Biff5', 'application/vnd.ms-excel'],
  636.     [0L, 'belong', '=', 6656L, 'Lotus 1-2-3'],
  637.     [0L, 'belong', '=', 512L, 'Lotus 1-2-3'],
  638.     [1L, 'string', '=', 'WPC', 'text/vnd.wordperfect'],
  639.     [0L, 'beshort', '=', 610L, 'Tower/XP rel 2 object'],
  640.     [0L, 'beshort', '=', 615L, 'Tower/XP rel 2 object'],
  641.     [0L, 'beshort', '=', 620L, 'Tower/XP rel 3 object'],
  642.     [0L, 'beshort', '=', 625L, 'Tower/XP rel 3 object'],
  643.     [0L, 'beshort', '=', 630L, 'Tower32/600/400 68020 object'],
  644.     [0L, 'beshort', '=', 640L, 'Tower32/800 68020'],
  645.     [0L, 'beshort', '=', 645L, 'Tower32/800 68010'],
  646.     [0L, 'lelong', '=', 407L, 'NetBSD little-endian object file'],
  647.     [0L, 'belong', '=', 407L, 'NetBSD big-endian object file'],
  648.     [0L, 'belong&0377777777', '=', 41400413L, 'NetBSD/i386 demand paged'],
  649.     [0L, 'belong&0377777777', '=', 41400410L, 'NetBSD/i386 pure'],
  650.     [0L, 'belong&0377777777', '=', 41400407L, 'NetBSD/i386'],
  651.     [0L, 'belong&0377777777', '=', 41400507L, 'NetBSD/i386 core'],
  652.     [0L, 'belong&0377777777', '=', 41600413L, 'NetBSD/m68k demand paged'],
  653.     [0L, 'belong&0377777777', '=', 41600410L, 'NetBSD/m68k pure'],
  654.     [0L, 'belong&0377777777', '=', 41600407L, 'NetBSD/m68k'],
  655.     [0L, 'belong&0377777777', '=', 41600507L, 'NetBSD/m68k core'],
  656.     [0L, 'belong&0377777777', '=', 42000413L, 'NetBSD/m68k4k demand paged'],
  657.     [0L, 'belong&0377777777', '=', 42000410L, 'NetBSD/m68k4k pure'],
  658.     [0L, 'belong&0377777777', '=', 42000407L, 'NetBSD/m68k4k'],
  659.     [0L, 'belong&0377777777', '=', 42000507L, 'NetBSD/m68k4k core'],
  660.     [0L, 'belong&0377777777', '=', 42200413L, 'NetBSD/ns32532 demand paged'],
  661.     [0L, 'belong&0377777777', '=', 42200410L, 'NetBSD/ns32532 pure'],
  662.     [0L, 'belong&0377777777', '=', 42200407L, 'NetBSD/ns32532'],
  663.     [0L, 'belong&0377777777', '=', 42200507L, 'NetBSD/ns32532 core'],
  664.     [0L, 'belong&0377777777', '=', 42400413L, 'NetBSD/sparc demand paged'],
  665.     [0L, 'belong&0377777777', '=', 42400410L, 'NetBSD/sparc pure'],
  666.     [0L, 'belong&0377777777', '=', 42400407L, 'NetBSD/sparc'],
  667.     [0L, 'belong&0377777777', '=', 42400507L, 'NetBSD/sparc core'],
  668.     [0L, 'belong&0377777777', '=', 42600413L, 'NetBSD/pmax demand paged'],
  669.     [0L, 'belong&0377777777', '=', 42600410L, 'NetBSD/pmax pure'],
  670.     [0L, 'belong&0377777777', '=', 42600407L, 'NetBSD/pmax'],
  671.     [0L, 'belong&0377777777', '=', 42600507L, 'NetBSD/pmax core'],
  672.     [0L, 'belong&0377777777', '=', 43000413L, 'NetBSD/vax demand paged'],
  673.     [0L, 'belong&0377777777', '=', 43000410L, 'NetBSD/vax pure'],
  674.     [0L, 'belong&0377777777', '=', 43000407L, 'NetBSD/vax'],
  675.     [0L, 'belong&0377777777', '=', 43000507L, 'NetBSD/vax core'],
  676.     [0L, 'lelong', '=', 459141L, 'ECOFF NetBSD/alpha binary'],
  677.     [0L, 'belong&0377777777', '=', 43200507L, 'NetBSD/alpha core'],
  678.     [0L, 'belong&0377777777', '=', 43400413L, 'NetBSD/mips demand paged'],
  679.     [0L, 'belong&0377777777', '=', 43400410L, 'NetBSD/mips pure'],
  680.     [0L, 'belong&0377777777', '=', 43400407L, 'NetBSD/mips'],
  681.     [0L, 'belong&0377777777', '=', 43400507L, 'NetBSD/mips core'],
  682.     [0L, 'belong&0377777777', '=', 43600413L, 'NetBSD/arm32 demand paged'],
  683.     [0L, 'belong&0377777777', '=', 43600410L, 'NetBSD/arm32 pure'],
  684.     [0L, 'belong&0377777777', '=', 43600407L, 'NetBSD/arm32'],
  685.     [0L, 'belong&0377777777', '=', 43600507L, 'NetBSD/arm32 core'],
  686.     [0L, 'string', '=', 'StartFontMetrics', 'font/x-sunos-news'],
  687.     [0L, 'string', '=', 'StartFont', 'font/x-sunos-news'],
  688.     [0L, 'belong', '=', 326773060L, 'font/x-sunos-news'],
  689.     [0L, 'belong', '=', 326773063L, 'font/x-sunos-news'],
  690.     [0L, 'belong', '=', 326773072L, 'font/x-sunos-news'],
  691.     [0L, 'belong', '=', 326773073L, 'font/x-sunos-news'],
  692.     [8L, 'belong', '=', 326773573L, 'font/x-sunos-news'],
  693.     [8L, 'belong', '=', 326773576L, 'font/x-sunos-news'],
  694.     [0L, 'string', '=', 'Octave-1-L', 'Octave binary data (little endian)'],
  695.     [0L, 'string', '=', 'Octave-1-B', 'Octave binary data (big endian)'],
  696.     [0L, 'string', '=', '\177OLF', 'OLF'],
  697.     [0L, 'beshort', '=', 34765L, 'OS9/6809 module:'],
  698.     [0L, 'beshort', '=', 19196L, 'OS9/68K module:'],
  699.     [0L, 'long', '=', 61374L, 'OSF/Rose object'],
  700.     [0L, 'short', '=', 565L, 'i386 COFF object'],
  701.     [0L, 'short', '=', 10775L, '"compact bitmap" format (Poskanzer)'],
  702.     [0L, 'string', '=', '%PDF-', 'application/pdf'],
  703.     [0L, 'lelong', '=', 101555L, 'PDP-11 single precision APL workspace'],
  704.     [0L, 'lelong', '=', 101554L, 'PDP-11 double precision APL workspace'],
  705.     [0L, 'leshort', '=', 407L, 'PDP-11 executable'],
  706.     [0L, 'leshort', '=', 401L, 'PDP-11 UNIX/RT ldp'],
  707.     [0L, 'leshort', '=', 405L, 'PDP-11 old overlay'],
  708.     [0L, 'leshort', '=', 410L, 'PDP-11 pure executable'],
  709.     [0L, 'leshort', '=', 411L, 'PDP-11 separate I&D executable'],
  710.     [0L, 'leshort', '=', 437L, 'PDP-11 kernel overlay'],
  711.     [0L, 'beshort', '=', 39168L, 'PGP key public ring'],
  712.     [0L, 'beshort', '=', 38145L, 'PGP key security ring'],
  713.     [0L, 'beshort', '=', 38144L, 'PGP key security ring'],
  714.     [0L, 'beshort', '=', 42496L, 'PGP encrypted data'],
  715.     [0L, 'string', '=', '-----BEGIN PGP', 'PGP armored data'],
  716.     [0L, 'string', '=', '# PaCkAgE DaTaStReAm', 'pkg Datastream (SVR4)'],
  717.     [0L, 'short', '=', 601L, 'mumps avl global'],
  718.     [0L, 'short', '=', 602L, 'mumps blt global'],
  719.     [0L, 'string', '=', '%!', 'application/postscript'],
  720.     [0L, 'string', '=', '\004%!', 'application/postscript'],
  721.     [0L, 'belong', '=', 3318797254L, 'DOS EPS Binary File'],
  722.     [0L, 'string', '=', '*PPD-Adobe:', 'application/pdf'],
  723.     [0L, 'string', '=', '\033%-12345X@PJL', 'HP Printer Job Language data'],
  724.     [0L, 'string', '=', '\033%-12345X@PJL', 'HP Printer Job Language data'],
  725.     [0L, 'string', '=', '\033E\033', 'image/x-pcl-hp'],
  726.     [0L, 'string', '=', '@document(', 'Imagen printer'],
  727.     [0L, 'string', '=', 'Rast', 'RST-format raster font data'],
  728.     [0L, 'belong&0xff00ffff', '=', 1442840576L, 'ps database'],
  729.     [0L, 'long', '=', 1351614727L, 'Pyramid 90x family executable'],
  730.     [0L, 'long', '=', 1351614728L, 'Pyramid 90x family pure executable'],
  731.     [0L, 'long', '=', 1351614731L, 'Pyramid 90x family demand paged pure executable'],
  732.     [0L, 'beshort', '=', 60843L, ''],
  733.     [0L, 'string', '=', '{\\\\rtf', 'Rich Text Format data,'],
  734.     [38L, 'string', '=', 'Spreadsheet', 'sc spreadsheet file'],
  735.     [8L, 'string', '=', '\001s SCCS', 'archive data'],
  736.     [0L, 'byte', '=', 46L, 'Sendmail frozen configuration'],
  737.     [0L, 'short', '=', 10012L, 'Sendmail frozen configuration'],
  738.     [0L, 'lelong', '=', 234L, 'BALANCE NS32000 .o'],
  739.     [0L, 'lelong', '=', 4330L, 'BALANCE NS32000 executable (0 @ 0)'],
  740.     [0L, 'lelong', '=', 8426L, 'BALANCE NS32000 executable (invalid @ 0)'],
  741.     [0L, 'lelong', '=', 12522L, 'BALANCE NS32000 standalone executable'],
  742.     [0L, 'leshort', '=', 4843L, 'SYMMETRY i386 .o'],
  743.     [0L, 'leshort', '=', 8939L, 'SYMMETRY i386 executable (0 @ 0)'],
  744.     [0L, 'leshort', '=', 13035L, 'SYMMETRY i386 executable (invalid @ 0)'],
  745.     [0L, 'leshort', '=', 17131L, 'SYMMETRY i386 standalone executable'],
  746.     [0L, 'string', '=', 'kbd!map', 'kbd map file'],
  747.     [0L, 'belong', '=', 407L, 'old SGI 68020 executable'],
  748.     [0L, 'belong', '=', 410L, 'old SGI 68020 pure executable'],
  749.     [0L, 'beshort', '=', 34661L, 'disk quotas file'],
  750.     [0L, 'beshort', '=', 1286L, 'IRIS Showcase file'],
  751.     [0L, 'beshort', '=', 550L, 'IRIS Showcase template'],
  752.     [0L, 'belong', '=', 1396917837L, 'IRIS Showcase file'],
  753.     [0L, 'belong', '=', 1413695053L, 'IRIS Showcase template'],
  754.     [0L, 'belong', '=', 3735927486L, 'IRIX Parallel Arena'],
  755.     [0L, 'beshort', '=', 352L, 'MIPSEB COFF executable'],
  756.     [0L, 'beshort', '=', 354L, 'MIPSEL COFF executable'],
  757.     [0L, 'beshort', '=', 24577L, 'MIPSEB-LE COFF executable'],
  758.     [0L, 'beshort', '=', 25089L, 'MIPSEL-LE COFF executable'],
  759.     [0L, 'beshort', '=', 355L, 'MIPSEB MIPS-II COFF executable'],
  760.     [0L, 'beshort', '=', 358L, 'MIPSEL MIPS-II COFF executable'],
  761.     [0L, 'beshort', '=', 25345L, 'MIPSEB-LE MIPS-II COFF executable'],
  762.     [0L, 'beshort', '=', 26113L, 'MIPSEL-LE MIPS-II COFF executable'],
  763.     [0L, 'beshort', '=', 320L, 'MIPSEB MIPS-III COFF executable'],
  764.     [0L, 'beshort', '=', 322L, 'MIPSEL MIPS-III COFF executable'],
  765.     [0L, 'beshort', '=', 16385L, 'MIPSEB-LE MIPS-III COFF executable'],
  766.     [0L, 'beshort', '=', 16897L, 'MIPSEL-LE MIPS-III COFF executable'],
  767.     [0L, 'beshort', '=', 384L, 'MIPSEB Ucode'],
  768.     [0L, 'beshort', '=', 386L, 'MIPSEL Ucode'],
  769.     [0L, 'belong', '=', 3735924144L, 'IRIX core dump'],
  770.     [0L, 'belong', '=', 3735924032L, 'IRIX 64-bit core dump'],
  771.     [0L, 'belong', '=', 3133063355L, 'IRIX N32 core dump'],
  772.     [0L, 'string', '=', 'CrshDump', 'IRIX vmcore dump of'],
  773.     [0L, 'string', '=', 'SGIAUDIT', 'SGI Audit file'],
  774.     [0L, 'string', '=', 'WNGZWZSC', 'Wingz compiled script'],
  775.     [0L, 'string', '=', 'WNGZWZSS', 'Wingz spreadsheet'],
  776.     [0L, 'string', '=', 'WNGZWZHP', 'Wingz help file'],
  777.     [0L, 'string', '=', '\\#Inventor', 'V IRIS Inventor 1.0 file'],
  778.     [0L, 'string', '=', '\\#Inventor', 'V2 Open Inventor 2.0 file'],
  779.     [0L, 'string', '=', 'glfHeadMagic();', 'GLF_TEXT'],
  780.     [4L, 'belong', '=', 1090584576L, 'GLF_BINARY_LSB_FIRST'],
  781.     [4L, 'belong', '=', 321L, 'GLF_BINARY_MSB_FIRST'],
  782.     [0L, 'string', '=', '<!DOCTYPE HTML', 'text/html'],
  783.     [0L, 'string', '=', '<!doctype html', 'text/html'],
  784.     [0L, 'string', '=', '<HEAD', 'text/html'],
  785.     [0L, 'string', '=', '<head', 'text/html'],
  786.     [0L, 'string', '=', '<TITLE', 'text/html'],
  787.     [0L, 'string', '=', '<title', 'text/html'],
  788.     [0L, 'string', '=', '<html', 'text/html'],
  789.     [0L, 'string', '=', '<HTML', 'text/html'],
  790.     [0L, 'string', '=', '<!DOCTYPE', 'exported SGML document text'],
  791.     [0L, 'string', '=', '<!doctype', 'exported SGML document text'],
  792.     [0L, 'string', '=', '<!SUBDOC', 'exported SGML subdocument text'],
  793.     [0L, 'string', '=', '<!subdoc', 'exported SGML subdocument text'],
  794.     [0L, 'string', '=', '<!--', 'exported SGML document text'],
  795.     [0L, 'string', '=', 'RTSS', 'NetMon capture file'],
  796.     [0L, 'string', '=', 'TRSNIFF data    \032', 'Sniffer capture file'],
  797.     [0L, 'string', '=', 'XCP\000', 'NetXRay capture file'],
  798.     [0L, 'ubelong', '=', 2712847316L, 'tcpdump capture file (big-endian)'],
  799.     [0L, 'ulelong', '=', 2712847316L, 'tcpdump capture file (little-endian)'],
  800.     [0L, 'string', '=', '<!SQ DTD>', 'Compiled SGML rules file'],
  801.     [0L, 'string', '=', '<!SQ A/E>', 'A/E SGML Document binary'],
  802.     [0L, 'string', '=', '<!SQ STS>', 'A/E SGML binary styles file'],
  803.     [0L, 'short', '=', 49374L, 'Compiled PSI (v1) data'],
  804.     [0L, 'short', '=', 49370L, 'Compiled PSI (v2) data'],
  805.     [0L, 'short', '=', 125252L, 'SoftQuad DESC or font file binary'],
  806.     [0L, 'string', '=', 'SQ BITMAP1', 'SoftQuad Raster Format text'],
  807.     [0L, 'string', '=', 'X SoftQuad', 'troff Context intermediate'],
  808.     [0L, 'belong&077777777', '=', 600413L, 'sparc demand paged'],
  809.     [0L, 'belong&077777777', '=', 600410L, 'sparc pure'],
  810.     [0L, 'belong&077777777', '=', 600407L, 'sparc'],
  811.     [0L, 'belong&077777777', '=', 400413L, 'mc68020 demand paged'],
  812.     [0L, 'belong&077777777', '=', 400410L, 'mc68020 pure'],
  813.     [0L, 'belong&077777777', '=', 400407L, 'mc68020'],
  814.     [0L, 'belong&077777777', '=', 200413L, 'mc68010 demand paged'],
  815.     [0L, 'belong&077777777', '=', 200410L, 'mc68010 pure'],
  816.     [0L, 'belong&077777777', '=', 200407L, 'mc68010'],
  817.     [0L, 'belong', '=', 407L, 'old sun-2 executable'],
  818.     [0L, 'belong', '=', 410L, 'old sun-2 pure executable'],
  819.     [0L, 'belong', '=', 413L, 'old sun-2 demand paged executable'],
  820.     [0L, 'belong', '=', 525398L, 'SunOS core file'],
  821.     [0L, 'long', '=', 4197695630L, 'SunPC 4.0 Hard Disk'],
  822.     [0L, 'string', '=', '#SUNPC_CONFIG', 'SunPC 4.0 Properties Values'],
  823.     [0L, 'string', '=', 'snoop', 'Snoop capture file'],
  824.     [36L, 'string', '=', 'acsp', 'Kodak Color Management System, ICC Profile'],
  825.     [0L, 'string', '=', '#!teapot\012xdr', 'teapot work sheet (XDR format)'],
  826.     [0L, 'string', '=', '\032\001', 'Compiled terminfo entry'],
  827.     [0L, 'short', '=', 433L, 'Curses screen image'],
  828.     [0L, 'short', '=', 434L, 'Curses screen image'],
  829.     [0L, 'string', '=', '\367\002', 'TeX DVI file'],
  830.     [0L, 'string', '=', '\367\203', 'font/x-tex'],
  831.     [0L, 'string', '=', '\367Y', 'font/x-tex'],
  832.     [0L, 'string', '=', '\367\312', 'font/x-tex'],
  833.     [0L, 'string', '=', 'This is TeX,', 'TeX transcript text'],
  834.     [0L, 'string', '=', 'This is METAFONT,', 'METAFONT transcript text'],
  835.     [2L, 'string', '=', '\000\021', 'font/x-tex-tfm'],
  836.     [2L, 'string', '=', '\000\022', 'font/x-tex-tfm'],
  837.     [0L, 'string', '=', '\\\\input\\', 'texinfo Texinfo source text'],
  838.     [0L, 'string', '=', 'This is Info file', 'GNU Info text'],
  839.     [0L, 'string', '=', '\\\\input', 'TeX document text'],
  840.     [0L, 'string', '=', '\\\\section', 'LaTeX document text'],
  841.     [0L, 'string', '=', '\\\\setlength', 'LaTeX document text'],
  842.     [0L, 'string', '=', '\\\\documentstyle', 'LaTeX document text'],
  843.     [0L, 'string', '=', '\\\\chapter', 'LaTeX document text'],
  844.     [0L, 'string', '=', '\\\\documentclass', 'LaTeX 2e document text'],
  845.     [0L, 'string', '=', '\\\\relax', 'LaTeX auxiliary file'],
  846.     [0L, 'string', '=', '\\\\contentsline', 'LaTeX table of contents'],
  847.     [0L, 'string', '=', '\\\\indexentry', 'LaTeX raw index file'],
  848.     [0L, 'string', '=', '\\\\begin{theindex}', 'LaTeX sorted index'],
  849.     [0L, 'string', '=', '\\\\glossaryentry', 'LaTeX raw glossary'],
  850.     [0L, 'string', '=', '\\\\begin{theglossary}', 'LaTeX sorted glossary'],
  851.     [0L, 'string', '=', 'This is makeindex', 'Makeindex log file'],
  852.     [0L, 'string', '=', '**TI82**', 'TI-82 Graphing Calculator'],
  853.     [0L, 'string', '=', '**TI83**', 'TI-83 Graphing Calculator'],
  854.     [0L, 'string', '=', '**TI85**', 'TI-85 Graphing Calculator'],
  855.     [0L, 'string', '=', '**TI92**', 'TI-92 Graphing Calculator'],
  856.     [0L, 'string', '=', '**TI80**', 'TI-80 Graphing Calculator File.'],
  857.     [0L, 'string', '=', '**TI81**', 'TI-81 Graphing Calculator File.'],
  858.     [0L, 'string', '=', 'TZif', 'timezone data'],
  859.     [0L, 'string', '=', '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000', 'old timezone data'],
  860.     [0L, 'string', '=',
  861.      '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000',
  862.      'old timezone data'],
  863.     [0L, 'string', '=',
  864.      '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000',
  865.      'old timezone data'],
  866.     [0L, 'string', '=',
  867.      '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000',
  868.      'old timezone data'],
  869.     [0L, 'string', '=',
  870.      '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000',
  871.      'old timezone data'],
  872.     [0L, 'string', '=',
  873.      '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000',
  874.      'old timezone data'],
  875.     [0L, 'string', '=', '.\\\\"', 'troff or preprocessor input text'],
  876.     [0L, 'string', '=', '\'\\\\"', 'troff or preprocessor input text'],
  877.     [0L, 'string', '=', '\'.\\\\"', 'troff or preprocessor input text'],
  878.     [0L, 'string', '=', '\\\\"', 'troff or preprocessor input text'],
  879.     [0L, 'string', '=', 'x T', 'ditroff text'],
  880.     [0L, 'string', '=', '@\357', 'very old (C/A/T) troff output data'],
  881.     [0L, 'string', '=', 'Interpress/Xerox', 'Xerox InterPress data'],
  882.     [0L, 'short', '=', 263L, 'unknown machine executable'],
  883.     [0L, 'short', '=', 264L, 'unknown pure executable'],
  884.     [0L, 'short', '=', 265L, 'PDP-11 separate I&D'],
  885.     [0L, 'short', '=', 267L, 'unknown pure executable'],
  886.     [0L, 'long', '=', 268L, 'unknown demand paged pure executable'],
  887.     [0L, 'long', '=', 269L, 'unknown demand paged pure executable'],
  888.     [0L, 'long', '=', 270L, 'unknown readable demand paged pure executable'],
  889.     [0L, 'string', '=', 'begin uuencoded', 'or xxencoded text'],
  890.     [0L, 'string', '=', 'xbtoa Begin', "btoa'd text"],
  891.     [0L, 'string', '=', '$\012ship', "ship'd binary text"],
  892.     [0L, 'string', '=', 'Decode the following with bdeco', 'bencoded News text'],
  893.     [11L, 'string', '=', 'must be converted with BinHex', 'BinHex binary text'],
  894.     [0L, 'short', '=', 610L, 'Perkin-Elmer executable'],
  895.     [0L, 'beshort', '=', 572L, 'amd 29k coff noprebar executable'],
  896.     [0L, 'beshort', '=', 1572L, 'amd 29k coff prebar executable'],
  897.     [0L, 'beshort', '=', 160007L, 'amd 29k coff archive'],
  898.     [6L, 'beshort', '=', 407L, 'unicos (cray) executable'],
  899.     [596L, 'string', '=', 'X\337\377\377', 'Ultrix core file'],
  900.     [0L, 'string', '=', 'Joy!peffpwpc', 'header for PowerPC PEF executable'],
  901.     [0L, 'lelong', '=', 101557L, 'VAX single precision APL workspace'],
  902.     [0L, 'lelong', '=', 101556L, 'VAX double precision APL workspace'],
  903.     [0L, 'lelong', '=', 407L, 'VAX executable'],
  904.     [0L, 'lelong', '=', 410L, 'VAX pure executable'],
  905.     [0L, 'lelong', '=', 413L, 'VAX demand paged pure executable'],
  906.     [0L, 'leshort', '=', 570L, 'VAX COFF executable'],
  907.     [0L, 'leshort', '=', 575L, 'VAX COFF pure executable'],
  908.     [0L, 'string', '=', 'LBLSIZE=', 'VICAR image data'],
  909.     [43L, 'string', '=', 'SFDU_LABEL', 'VICAR label file'],
  910.     [0L, 'short', '=', 21845L, 'VISX image file'],
  911.     [0L, 'string', '=', '\260\0000\000', 'VMS VAX executable'],
  912.     [0L, 'belong', '=', 50331648L, 'VMS Alpha executable'],
  913.     [1L, 'string', '=', 'WPC', '(Corel/WP)'],
  914.     [0L, 'string', '=', 'core', 'core file (Xenix)'],
  915.     [0L, 'byte', '=', 128L, '8086 relocatable (Microsoft)'],
  916.     [0L, 'leshort', '=', 65381L, 'x.out'],
  917.     [0L, 'leshort', '=', 518L, 'Microsoft a.out'],
  918.     [0L, 'leshort', '=', 320L, 'old Microsoft 8086 x.out'],
  919.     [0L, 'lelong', '=', 518L, 'b.out'],
  920.     [0L, 'leshort', '=', 1408L, 'XENIX 8086 relocatable or 80286 small model'],
  921.     [0L, 'long', '=', 59399L, 'object file (z8000 a.out)'],
  922.     [0L, 'long', '=', 59400L, 'pure object file (z8000 a.out)'],
  923.     [0L, 'long', '=', 59401L, 'separate object file (z8000 a.out)'],
  924.     [0L, 'long', '=', 59397L, 'overlay object file (z8000 a.out)'],
  925.     [0L, 'string', '=', 'ZyXEL\002', 'ZyXEL voice data'],
  926.     ]
  927.  
  928. magicNumbers = []
  929. hexdigits = '0123456789abcdefABCDEF'
  930.  
  931.  
  932. def strToNum(n):
  933.     if n[:1] == 'x':
  934.         n = '0' + n
  935.     if n[:2] == '0x':
  936.         # hex
  937.         return int(n, 16)
  938.     
  939.     elif n[0] == '\\':
  940.         # octal
  941.         n = n[1:]
  942.         return int(n, 8)
  943.     
  944.     else:
  945.         return int(n)
  946.  
  947.  
  948. def unescape(s):
  949.     # replace string escape sequences
  950.     while 1:
  951.         m = re.search(r'\\', s)
  952.  
  953.         if not m:
  954.             break
  955.  
  956.         x = m.start() + 1
  957.  
  958.         if m.end() == len(s):
  959.             # escaped space at end
  960.             s = s[:len(s) - 1] + ' '
  961.         
  962.         elif s[x:x + 2] == '0x':
  963.             # hex ascii value
  964.             c = chr(strToNum(s[x:x + 4]))
  965.             s = s[:x - 1] + c + s[x + 4:]
  966.  
  967.         elif s[m.start() + 1] == 'x':
  968.             # hex ascii value
  969.             c = chr(strToNum(s[x:x + 3]))
  970.             s = s[:x - 1] + c + s[x + 3:]
  971.         
  972.         elif 58 > ord(s[x]) > 47:
  973.             # octal ascii value
  974.             end = x
  975.  
  976.             while ord(s[end]) > 47 and ord(s[end]) < 58:
  977.                 end = end + 1
  978.                 if end > len(s) - 1:
  979.                     break
  980.             c = chr(strToNum(s[x - 1:end]))
  981.             s = s[:x - 1] + c + s[end:]
  982.         
  983.         elif s[x] == 'n':
  984.             # newline
  985.             s = s[:x - 1] + '\n' + s[x + 1:]
  986.         
  987.         else:
  988.             break
  989.  
  990.     return s
  991.  
  992.  
  993. class magicTest:
  994.     def __init__(self, offset, t, op, value, msg, mask=None):
  995.         if t.count('&') > 0:
  996.             mask = strToNum(t[t.index('&') + 1:])
  997.             t = t[:t.index('&')]
  998.  
  999.         if type(offset) == type('a'):
  1000.             self.offset = strToNum(offset)
  1001.         else:
  1002.             self.offset = offset
  1003.  
  1004.         self.type = t
  1005.         self.msg = msg
  1006.         self.subTests = []
  1007.         self.op = op
  1008.         self.mask = mask
  1009.         self.value = value
  1010.  
  1011.     def test(self, data):
  1012.         if self.mask:
  1013.             data = data & self.mask
  1014.  
  1015.         if self.op == '=':
  1016.             if self.value == data:
  1017.                 return self.msg
  1018.  
  1019.         return None
  1020.  
  1021.     def compare(self, data):
  1022.         try:
  1023.             if self.type == 'string':
  1024.                 (c, s) = ('', '')
  1025.                 
  1026.                 for i in range(0, len(self.value) + 1):
  1027.                     if i + self.offset > len(data) - 1:
  1028.                         break
  1029.                     s = s + c
  1030.                     [c, ] = struct.unpack('c', data[self.offset + i])
  1031.                 
  1032.                 data = s
  1033.             
  1034.             elif self.type == 'short':
  1035.                 [data, ] = struct.unpack('h', data[self.offset:self.offset + 2])
  1036.             
  1037.             elif self.type == 'leshort':
  1038.                 [data, ] = struct.unpack('<h', data[self.offset:self.offset + 2])
  1039.             
  1040.             elif self.type == 'beshort':
  1041.                 [data, ] = struct.unpack('>H', data[self.offset:self.offset + 2])
  1042.             
  1043.             elif self.type == 'long':
  1044.                 [data, ] = struct.unpack('l', data[self.offset:self.offset + 4])
  1045.             
  1046.             elif self.type == 'lelong':
  1047.                 [data, ] = struct.unpack('<l', data[self.offset:self.offset + 4])
  1048.             
  1049.             elif self.type == 'belong':
  1050.                 [data, ] = struct.unpack('>l', data[self.offset:self.offset + 4])
  1051.             
  1052.             else:
  1053.                 pass
  1054.                 
  1055.         except:
  1056.             return None
  1057.  
  1058.         return self.test(data)
  1059.  
  1060.  
  1061. def load(file):
  1062.     global magicNumbers
  1063.     lines = open(file).readlines()
  1064.     last = {0: None}
  1065.     
  1066.     for line in lines:
  1067.         if re.match(r'\s*#', line):
  1068.             # comment
  1069.             continue
  1070.         
  1071.         else:
  1072.             # split up by space delimiters, and remove trailing space
  1073.             line = line.rstrip()
  1074.             line = re.split(r'\s*', line)
  1075.             
  1076.             if len(line) < 3:
  1077.                 # bad line
  1078.                 continue
  1079.             
  1080.             offset = line[0]
  1081.             type = line[1]
  1082.             value = line[2]
  1083.             level = 0
  1084.  
  1085.             while offset[0] == '>':
  1086.                 # count the level of the type
  1087.                 level = level + 1
  1088.                 offset = offset[1:]
  1089.             
  1090.             l = magicNumbers
  1091.  
  1092.             if level > 0:
  1093.                 l = last[level - 1].subTests
  1094.  
  1095.             if offset[0] in ('(', '&'):
  1096.                 # don't handle indirect and relative offsets just yet
  1097.                 pass
  1098.             
  1099.             else:
  1100.                 operands = ['=', '<', '>', '&']
  1101.                 if operands.count(value[0]) > 0:
  1102.                     # a comparison operator is specified
  1103.                     op = value[0]
  1104.                     value = value[1:]
  1105.                 else:
  1106.                     if len(value) > 1 and value[0] == '\\' and operands.count(value[1]) > 0:
  1107.                         # literal value that collides with operands is escaped
  1108.                         value = value[1:]
  1109.                     
  1110.                     op = '='
  1111.  
  1112.                 mask = None
  1113.  
  1114.                 if type == 'string':
  1115.                     while 1:
  1116.                         value = unescape(value)
  1117.                         if value[len(value) - 1] == ' ' and len(line) > 3:
  1118.                             # last value was an escaped space, join
  1119.                             value = value + line[3]
  1120.                             del line[3]
  1121.                         else:
  1122.                             break
  1123.                 else:
  1124.                     if value.count('&') != 0:
  1125.                         mask = value[value.index('&') + 1:]
  1126.                         value = value[:value.index('&') + 1]
  1127.  
  1128.                     try:
  1129.                         value = strToNum(value)
  1130.                     except:
  1131.                         continue
  1132.  
  1133.                     msg = ('').join(list(line[3:]))
  1134.  
  1135.                 new = magicTest(offset, type, op, value, msg, mask)
  1136.                 last[level] = new
  1137.                 l.append(new)
  1138.  
  1139.  
  1140. def load(file):
  1141.     global magicNumbers
  1142.     lines = open(file).readlines()
  1143.     last = {0: None}
  1144.     for line in lines:
  1145.         if re.match(r'\s*#', line):
  1146.             # comment
  1147.             continue
  1148.         
  1149.         else:
  1150.             # split up by space delimiters, and remove trailing space
  1151.             line = line.rstrip()
  1152.             line = re.split(r'\s*', line)
  1153.             
  1154.             if len(line) < 3:
  1155.                 # bad line
  1156.                 continue
  1157.             
  1158.             offset = line[0]
  1159.             type = line[1]
  1160.             value = line[2]
  1161.             level = 0
  1162.             
  1163.             while offset[0] == '>':
  1164.                 # count the level of the type
  1165.                 level = level + 1
  1166.                 offset = offset[1:]
  1167.             
  1168.             l = magicNumbers
  1169.             
  1170.             if level > 0:
  1171.                 l = last[level - 1].subTests
  1172.             
  1173.             if offset[0] == '(':
  1174.                 # don't handle indirect offsets just yet
  1175.                 pass
  1176.             
  1177.             elif offset[0] == '&':
  1178.                 # don't handle relative offsets just yet
  1179.                 pass
  1180.             
  1181.             else:
  1182.                 operands = ['=', '<', '>', '&']
  1183.                 if operands.count(value[0]) > 0:
  1184.  
  1185.                     # a comparison operator is specified
  1186.  
  1187.                     op = value[0]
  1188.                     value = value[1:]
  1189.                 else:
  1190.                     if len(value) > 1 and value[0] == '\\' and operands.count(value[1]) > 0:
  1191.  
  1192.                         # literal value that collides with operands is escaped
  1193.  
  1194.                         value = value[1:]
  1195.                     op = '='
  1196.  
  1197.                 mask = None
  1198.                 
  1199.                 if type == 'string':
  1200.                     while 1:
  1201.                         value = unescape(value)
  1202.                         if value[len(value) - 1] == ' ' and len(line) > 3:
  1203.  
  1204.                             # last value was an escaped space, join
  1205.  
  1206.                             value = value + line[3]
  1207.                             del line[3]
  1208.                         else:
  1209.                             break
  1210.                 else:
  1211.                     if value.count('&') != 0:
  1212.                         mask = value[value.index('&') + 1:]
  1213.                         value = value[:value.index('&') + 1]
  1214.                     try:
  1215.                         value = strToNum(value)
  1216.                     except:
  1217.                         continue
  1218.                     msg = ('').join(list(line[3:]))
  1219.                     
  1220.                 new = magicTest(offset, type, op, value, msg, mask)
  1221.                 last[level] = new
  1222.                 l.append(new)
  1223.  
  1224.  
  1225. def whatis(data):
  1226.     for test in magicNumbers:
  1227.         m = test.compare(data)
  1228.  
  1229.         if m:
  1230.             return m
  1231.  
  1232.     # no matching, magic number. is it binary or text?
  1233.     for c in data:
  1234.         #if ord(c) > 128:
  1235.         if ord(c) == 0:
  1236.             return 'data'
  1237.  
  1238.     # its ASCII, now do text tests
  1239.     if data.find('!/usr/bin/env python', 0, 256) > -1 or data.find('def ', 0, 8192) > -1:
  1240.         return 'application/x-python'
  1241.  
  1242.     return "text/plain"
  1243.  
  1244.  
  1245. def mime_type(f):
  1246.     if os.path.exists(f):
  1247.         if os.path.isdir(f):
  1248.             return "directory"
  1249.  
  1250.         return whatis(open(f, 'r').read(8192))
  1251.     else:
  1252.  
  1253.         return ''
  1254.  
  1255.  
  1256. for m in magic:
  1257.     magicNumbers.append(magicTest(m[0], m[1], m[2], m[3], m[4]))
  1258.